﻿/*

    This file is a part of BinaryDialog.
 
    BiLog IM aka BinaryDialog - WPF Client for XMPP Protocol
    Copyright (C) 2008  Christophe LEMOINE

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace BinaryDialog.Core.Graphics
{

    public class BitmapTransform
    {

        public static byte[] ImageFileResizedToBytes(byte[] Filebytes, Int16 Width, Int16 Height)
        {
            try
            {
                System.IO.MemoryStream Filestream = new System.IO.MemoryStream(Filebytes);
                Image bmp = Image.FromStream(Filestream);
                int sourceWidth = bmp.Width;
                int sourceHeight = bmp.Height;
                int sourceX = 0;
                int sourceY = 0;
                int destX = 0;
                int destY = 0;
                float nPercent = 0;
                float nPercentW = 0;
                float nPercentH = 0;
                nPercentW = ((float)Width / (float)sourceWidth);
                nPercentH = ((float)Height / (float)sourceHeight);
                if (nPercentH < nPercentW)
                {
                    nPercent = nPercentH;
                }
                else
                {
                    nPercent = nPercentW;
                }
                int destWidth = (int)(sourceWidth * nPercent);
                int destHeight = (int)(sourceHeight * nPercent);
                Bitmap bmPhoto = new Bitmap(destWidth, destHeight, PixelFormat.Format32bppArgb);
                System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto);
                grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
                grPhoto.DrawImage(bmp, new Rectangle(destX, destY, destWidth, destHeight), sourceX, sourceY, sourceWidth, sourceHeight, GraphicsUnit.Pixel);
                grPhoto.Dispose();
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                bmPhoto.Save(ms, ImageFormat.Png);
                bmPhoto.Dispose();
                return ms.ToArray();
            }
            catch
            {
                return null;
            }
        }

    }

}
